﻿using System;

namespace Lesson7_函数
{
    class Program
    {

        #region 基本概念
        //函数(方法)
        //本质是 具有名称的代码块
        //能够使用 函数(方法) 的名称 来执行该代码块
        //函数(方法)是封装代码进行重复使用的一种机制

        //主要作用
        //1.封装代码
        //2.抽象行为
        //3.提升代码复用率
        #endregion

        #region 函数写在哪里
        //1.class语句块
        //2.struct语句块
        #endregion

        #region 基本语法
        //   1      2      3               4
        //static 返回类型 函数名 (参数类型 参数名1，参数类型 参数名2，......)
        //{
        //      函数的代码逻辑;
        //      函数的代码逻辑;
        //      函数的代码逻辑;
        //      ............
        //           5
        //      return 返回值;(有返回类型才返回)
        //}

        //1-1.关于返回类型 void表示没有返回值
        //1-2.返回类型 可以写任意的变量类型

        //2.关于函数名 使用帕斯卡命名法命名 驼峰命名法 myName 帕斯卡命名法 MyName

        //3-1.参数不是必须的，可以有 0~n 个参数 参数可以是任意类型
        //3-2.多个参数键需要用 逗号 隔开
        //3-3.参数名 使用驼峰命名法
        //3-4.函数的参数是传递给函数的值或变量 用于在函数执行过程中使用 这些参数在函数声明时定义 并在调用函数时提供具体的值

        //4.返回类型为 void 也可以使用 return

        #endregion

        #region 实际运用
        //1.无参无返回值函数
        static void FunctionName1()
        {
            Console.WriteLine("无参无返回值函数");
        }

        //2，有参无返回值函数
        static void FunctionName2(string name)
        {
            Console.WriteLine(name);
        }

        //3.无参有返回值函数
        static string MyName()
        {
            return "LiberTy";
        }

        //4.有参有返回值函数
        static int Sum(int x, int y)
        {
            return x + y;
        }

        //5.有参有多返回值函数
        //实现同类型多返回值，使用数组为返回类型（若要实现不同类型多返回值 使用ref或out关键字）
        //传入两个参数
        static int[] Calc(int x, int y)
        {
            int sum = x + y;
            int avg = (x + y) / 2;
            int[] arr = { sum, avg };
            return arr;
        }
        #endregion

        #region 关于return
        //返回类型为 void 时 可以使用 return; 语句 直接退出函数
        //但当返回类型不为 void 时 使用return; 语句会报错

        //函数必须每条路径都有返回值！！！
        #endregion

        static void Main(string[] args)
        {
            #region 实际运用
            //1.无参无返回值函数
            FunctionName1();

            //2，有参无返回值函数
            //参数可以传 常量 变量 返回值为对应返回类型的函数
            //常量
            FunctionName2("有参无返回值函数");
            //变量
            string str = "变量";
            FunctionName2(str);
            //函数
            FunctionName2(MyName());

            //3.无参有返回值函数
            //有返回值的函数 要么直接使用它的返回值 要么将返回值赋给变量
            string str2 = MyName();
            Console.WriteLine(MyName());

            //4.有参有返回值函数
            Console.WriteLine(Sum(1, 2));

            //5.有参有多返回值函数
            int[] arr = Calc(1, 3);
            Console.WriteLine("和为{0}", arr[0]);
            Console.WriteLine("平均值为{0}", arr[1]);
            #endregion
        }
    }
}